package E_2024;

import java.util.Arrays;
import java.util.Comparator;

/*
题目描述
    给定一个字符串s，最多只能进行一次变换，返回变换后能得到的最小字符串（按照字典序进行比较）。
    变换规则：交换字符串中任意两个不同位置的字符。
    输入描述
        一串小写字母组成的字符串s
    输出描述
        按照要求进行变换得到的最小字符串。
    备注
        s是都是小写字符组成
        1 ≤ s.length ≤ 1000
    用例
        输入	abcdef
        输出	abcdef
        说明	abcdef已经是最小字符串，不需要交换。
 */
public class E_100_20 {
    public static void main(String[] args) {
        System.out.println(ans("accba"));
    }
    public static String ans(String str){
        // 第一列存字符，第二列存该字符再原str中的下标位置
        int[][] arr = new int[str.length()][2];
        for (int i = 0; i < str.length(); i++) {
            arr[i][0] = str.charAt(i);
            arr[i][1] = i;
        }
        int[][] temp = Arrays.copyOf(arr,arr.length);
        // 依据二维数组中的第一列排序，可得
        Arrays.sort(arr, Comparator.comparingInt(a -> a[0]));
        System.out.println(Arrays.deepToString(arr));
        for (int i = 0; i < arr.length; i++) {
            // 排序之后的字符下标 比对 原字符串下标，当下标出现变动，说明原字符非当前下标下的最小字符，
            // 交换当前下标下原字符与排序之后的字符
            if (arr[i][1] != i){
                int[] te = temp[i];
                temp[i] = temp[arr[i][1]];
                temp[arr[i][1]] = te;
                break;
            }
        }
        StringBuilder sb = new StringBuilder();
        for (int[] ints : temp) {
            sb.append((char)ints[0]);
        }
        return sb.toString();
    }
}
